package com.hsc.www.redis.jedisLettuce;

import org.openjdk.jmh.annotations.*;
import redis.clients.jedis.Jedis;

import java.util.concurrent.TimeUnit;

/**
 * 1、@OutputTimeUnit(TimeUnit.MILLISECONDS)测试结果的单位，
 * 2、@Threads(100)是开启多少个线程测试；
 * 3、@Warmup(iterations = 1)是预热的循环次数；
 * 4、@BenchmarkMode(Mode.Throughput)是测试的模式，可以测试吞吐，延时等；
 * 5、@Measurement(iterations = 2, time = 600, timeUnit = TimeUnit.MILLISECONDS)是测试的循环次数，以及时长；
 * 6、@State(Scope.Thread)，State和下面的Setup配合使用，意思是每个测试线程，都会使用独立的一个变量，这个变量就是Jedis jedis，使用Setup所修饰的方法来做初始化。
 */


@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Threads(100)
@Warmup(iterations = 1)
@BenchmarkMode(Mode.Throughput)
@Measurement(iterations = 2, time = 600, timeUnit = TimeUnit.MILLISECONDS)
@State(Scope.Thread)
public class JedisStudy {
    private static final int LOOP = 1;
    private Jedis jedis;

    @Setup
    public void setup() {
        jedis = new Jedis("106.12.180..184", 6379);
    }

    @Benchmark
    public void get() {
        for (int i = 0; i < LOOP; ++i) {
            jedis.get("a");
        }
    }
}